package com.beiding.dbrequest.client;

import com.beiding.dbrequest.common.SecondWorker;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;
import java.util.concurrent.TimeUnit;

/**
 * 客户端监听器
 * 监听客户端各种状态
 */
public interface ClientStrategy {

    /**
     * 连接成功 连接成功后的行为
     *
     * @param client
     * @param ctx
     */
  /*  default void onActive(Client client, ChannelHandlerContext ctx) {
        client.register(client.getName());
    }
*/
    /**
     * 连接断开后的行为
     *
     * @param client
     * @param ctx
     */
 /*   default void onInactive(Client client, ChannelHandlerContext ctx) {
        client.connect();
    }
*/
    /**
     * 连接后
     * 如果连接后失败,就尝试进行重连
     *
     * @param client
     * @param success
     */
//    default void afterConnect(Client client, boolean success) {
//        if (!success) {
//            long delay = client.getDelay();
//            long maxDelay = client.getMaxDelay();
//            delay = (long) (delay * 1.25);
//            if (delay > maxDelay) {
//                delay = maxDelay;
//            }
//            client.setDelay(delay);
//            Client.logInfo("尝试重新连接");
//            SecondWorker.worker.schedule((Runnable) client::connect, delay, TimeUnit.MILLISECONDS);
//        }else{
//            Client.logInfo("连接成功");
//            client.setDelay(1000);
//        }
//    }

    /**
     * 发生异常时
     *
     * @param client
     * @param ctx
     * @param cause
     */
    /*default void onError(Client client, ChannelHandlerContext ctx, Throwable cause) {

    }*/
}
